package br.fatec.webservice.client;

import java.util.List;

import br.fatec.model.bll.ClienteBll;
import br.fatec.model.bll.FormulaBll;
import br.fatec.model.entity.Cliente;
import br.fatec.model.entity.Formula;
import br.fatec.util.Log;

public class ThreadFlamelWs extends Thread {

	private ClientFlamelWs client;
	private ClienteBll clienteBll;
	private FormulaBll formulaBll;

	public ThreadFlamelWs() {
		clienteBll = new ClienteBll();
		formulaBll = new FormulaBll();
	}

	@Override
	public void run() {
		while (cadastrarClientes() || cadastrarFormulas()) {

		}
	}

	private boolean cadastrarClientes() {

		try {
			client = new ClientFlamelWs();
			List<Cliente> clientes = clienteBll.listarIntegrar();

			for (Cliente cliente : clientes) {
				while (!cliente.getIntegrado()) {
					try {
						if (cliente.getAtivo())
						{
							String retorno = client.cadastrarCliente(cliente);
							if(retorno.equals("true"))
								clienteBll.integrar(cliente, true);
							else
								throw new Exception(retorno);
						}
						else
						{
							String retorno = client.excluirCliente(cliente);
							if(retorno.equals("true"))
							{
								clienteBll.integrar(cliente, true);
								clienteBll.excluir(cliente);
							}
							else
								throw new Exception(retorno);
						}
					} 
					catch (Exception e) {
						Log.gravarLog(e);
						clienteBll.integrar(cliente, false);
					}
					
				}
			}

			if (clientes != null && clientes.size() > 0)
				return true;

			return false;
		} catch (Exception e) {
			Log.gravarLog(e);
			return true;
		}
	}

	private boolean cadastrarFormulas() {

		try {
			client = new ClientFlamelWs();
			List<Formula> formulas = formulaBll.listarIntegrar();

			for (Formula formula : formulas) {
				while (!formula.getIntegrado()) {
					try {
						if (formula.getAtivo()) {
							String retorno = client.cadastrarFormula(formula);
							if(retorno.equals("true"))
								formulaBll.integrar(formula, true);
							else
								throw new Exception(retorno);
						} else {
							String retorno = client.excluirFormula(formula);
							if(retorno.equals("true"))
								formulaBll.integrar(formula, true);
							else
								throw new Exception(retorno);
						}
					} catch (Exception e) {
						Log.gravarLog(e);
						formulaBll.integrar(formula, false);
					}
				}
			}

			if (formulas != null && formulas.size() > 0)
				return true;

			return false;
		} catch (Exception e) {
			Log.gravarLog(e);
			return true;
		}
	}
}
